package com.dragon.smtp.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.util.StrUtil;
import com.dragon.smtp.dao.MailDao;
import com.dragon.smtp.domain.User;
import com.dragon.smtp.dao.UserDao;
import com.dragon.smtp.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dragon.smtp.util.DragonResult;
import com.dragon.smtp.util.RegexUtils;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 小龙
 * @since 2022-11-08
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements IUserService {

    @Autowired
    UserDao userDao;
    @Autowired
    MailDao mailDao;
    /**
     * 根据
     * @param user
     * @return
     */
    @Override
    public DragonResult login(User user) {
        System.out.println(user);
        //1. 首先验证手机号格式
        if (RegexUtils.isEmailInvalid(user.getUsername())) {
            // 1.1 格式有误
            return DragonResult.fail("邮箱号格式有误");
        }
        System.out.println(user);
        // 1.2 格式正确
        //2. 判断该用户在数据库中是否存在 根据账号（电话号）来查找。
        User user1 = query().eq("username", user.getUsername()).one();
        if(user1==null){
            return DragonResult.fail("用户不存在！");
        }
        if(user1.getPassword().equals(user.getPassword())){
            // 成功
            return DragonResult.ok(user1);
        }else {
            return DragonResult.fail("登陆失败！");
        }
    }

    @Override
    public DragonResult register(User user) {
        //1. 首先验证手机号格式
        if (RegexUtils.isEmailInvalid(user.getUsername())) {
            // 1.1 格式有误
            return DragonResult.fail("邮箱号格式有误");
        }
        boolean save = save(user);
        return DragonResult.ok(save,user);
    }

    // 通讯录。包括我发过邮件的人，还有发过给我邮件的人
    // 显示昵称和邮箱号
    @Override
    public DragonResult getFriends(User user) {
        //我发给的人
        List<String> toName = mailDao.getToByFrom(user.getUsername());
        //发给我的人
        List<String> fromName = mailDao.getFromByTo(user.getUsername());
        List<User> friend = new ArrayList<>();
        for (int i = 0; i < toName.size(); i++) {
            String userName = toName.get(i);
            String nickName = userDao.getNickNameByName(userName);
            user.setNickName(nickName);
            friend.add(user);
        }
        for (int i = 0; i < fromName.size(); i++) {
            String userName = toName.get(i);
            String nickName = userDao.getNickNameByName(userName);
            user.setNickName(nickName);
            friend.add(user);
        }
        System.out.println(friend);
        return DragonResult.ok(friend!=null&&!friend.isEmpty(),friend);
    }
}

